/**
 * @Author: whflovecn
 * @Date: 2021-04-19 10:57:32
 * @LastEditTime: 2021-05-31 17:40:59
 * @LastEditors: whflovecn
 * @Description: 登录控制器
 * @FilePath: \complex\app\controller\login.js
 */
"use strict";

const Controller = require("egg").Controller;

class Login extends Controller {
  async login() {
    const { ctx } = this;
    const token = await ctx.service.login.login(
      ctx.request.body.username,
      ctx.request.body.password
    );
    ctx.body = token;
  }

  async logout() {
    const { ctx } = this;
    const id = ctx.params.id;
    ctx.body = await ctx.service.login.logout(
      id,
      ctx.request.header.authorization || ""
    );
  }

  async check() {
    const { ctx,service } = this;
    if (ctx.request.body.token) {
      try {
        let decode = ctx.app.jwt.verify(ctx.request.body.token, ctx.app.config.jwt.secret);

        if (decode && decode.message) {
          ctx.body = ctx.app.error(
            code.TOKEN,
            "token错误，请重新登录: " + decode.message
          );
          return;
        } else {
          //返回用户信息
          const data = await service.mysql.findById('meta','staff',decode.id)
          ctx.body = data
        }
      } catch (e) {
        ctx.body = ctx.app.error(code.TOKEN, "token检查失败: " + e);
      }
    } else {
      ctx.body = ctx.app.error(code.TOKEN_ISNULL, "没有token");
    }
  }

  async menu() {
    const { ctx,service } = this;
    // TODO: 根据token返回menu
    const token = ctx.request.header.authorization
    if (token) {
      try {
        let decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret);
        if (decode && decode.message) {
          ctx.body = ctx.app.error(
            code.TOKEN,
            "token错误，请重新登录: " + decode.message
          );
          return;
        } else {
          //返回用户信息
          const data = await service.mysql.tree('meta','v_menu','id',{staff_id:decode.id,parent:null})
          if (data.success){
            ctx.body = ctx.app.done(data.result)
          }else{
            ctx.body = ctx.app.error(code.UNKNOWN, "发生未知错误，controller/login.js line:72");
          }
        }
      } catch (e) {
        ctx.body = ctx.app.error(code.TOKEN, "token检查失败: " + e);
      }
    } else {
      ctx.body = ctx.app.error(code.TOKEN_ISNULL, "没有token");
    }
  }
}

module.exports = Login;
